/*
 * Carrito.java
 *
 * Created on 4 de abril de 2007, 10:55
 */

package despachador.pagina;

import excepciones.AvwException;
import gestores.pagina.GestorCarrito;
import java.io.*;
import java.net.*;
import java.util.ArrayList;
import java.util.HashMap;

import javax.servlet.*;
import javax.servlet.http.*;
import util.FuncionServlets;
import util.Utiles;

/**
 *
 * @author Administrador
 * @version
 */
public class Carrito extends HttpServlet {
    private HttpSession session = null;
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        // Guardar los parametros
        FuncionServlets.obtenerParametros(request, response, true);
        
        session = request.getSession(true);
        response.setContentType("text/html;charset=UTF-8");
        String codCampania = String.valueOf(request.getAttribute("codCampania"));
        String codArticulo = String.valueOf(request.getParameter("codArticulo"));
        String codEliminar = String.valueOf(request.getParameter("artEliminar"));
        String accion = "";
        if (request.getParameter("carrito")!= null){
            accion = (String)request.getParameter("carrito");
        }
        
        int cantidad = 1;//seteo la cantidad del articulo en 1

        ArrayList<HashMap> carrito;
        if(session.getAttribute("carritosesion") == null){
            carrito = new ArrayList<HashMap>();
        }else{
            carrito = (ArrayList<HashMap>) session.getAttribute("carritosesion");//Obtengo el carrito que se encuentra en sesion
            if (!carrito.isEmpty() && !carrito.get(0).get("codCampania").equals(codCampania)){
            //Valido que el carrito que obtuve es de la misma campania donde se encuentra el cliente
                carrito = new ArrayList<HashMap>();
                //No es la misma campania por lo tanto seteo el carrito como new
            }
        }
        if (accion.equals("ingresar")){
        //si desea ingresar un nuevo articulo en el carrito
            try {
                // Verificamos si ya existe el articulo agregado en el carrito
                boolean ban = false;
                for (HashMap articulo : carrito){
                    if( codArticulo.equals((String)articulo.get("artCodigo"))){
                        ban = true;
                        request.setAttribute("_msg_advertencia",
                            "El articulo que desea ingresar al carrito ya se fue ingresado anteriormente.");
                            //En el caso en que exista el articulo que desea ingresar envia el mensaje de advertencia
                    }
                }
                if (ban == false){
                    // Se agrega el articulo al carrito
                    float precio = 0;
                    HashMap articuloHash = new HashMap();
                    articuloHash = GestorCarrito.agregarItem(codCampania,codArticulo);
                    articuloHash.put("cantidad", cantidad);//Seteo la cantidad que va a comprar del articulo en 1
                    precio = (Float.parseFloat(Utiles.noNull(articuloHash.get("artPrecioDescuentoBruto")))+ 
                    Float.parseFloat(Utiles.noNull(articuloHash.get("artCostoEnvioBruto"))))*cantidad;
                    //El precio es la suma de precioDescuentoBruto con el costo y a este resultado lo multiplico por la cantidad
                    articuloHash.put("subTotal", precio);
                    articuloHash.put("codCampania", codCampania);
                    carrito.add(articuloHash);
                    session.setAttribute("carritosesion",carrito);
                }
                this.armarPagina(request, response);
            } catch (NullPointerException e) {
                 request.setAttribute("error",
                            e.getMessage());
                    dispatch(request, response, "/compositor/pagina/error.jsp");
            } catch (AvwException e) {
                request.setAttribute("error",
                            e.getMessage());
                    dispatch(request, response, "/compositor/pagina/error.jsp");
            }
        }else if(accion.equals("modificar")){
        //Si desea modificar la cantidad de algun articulo en el carrito
                float precio = 0;
                
                for (HashMap artHash : carrito){
                    int cant = Integer.parseInt((String)request.getParameter("cantidad_" + artHash.get("artCodigo")));
                    artHash.put("cantidad", cant);
                    if (artHash.get("artPrecioDescuento")!=null && artHash.get("artCostoEnvio")!=null){
                        precio = (Float.parseFloat(Utiles.noNull(artHash.get("artPrecioDescuentoBruto")))+ 
                        Float.parseFloat(Utiles.noNull(artHash.get("artCostoEnvioBruto"))))*cant;
                        //El precio es la suma de precioDescuentoBruto con el costo y a este resultado lo multiplico por la cantidad 
                    }
                    artHash.put("subTotal", precio);
                }
                session.setAttribute("carritosesion",carrito);
                this.armarPagina(request, response);
        }else if (accion.equals("eliminar")){
        //Si desea eliminar algun articulo del carrito
            ArrayList<HashMap> array = new ArrayList<HashMap>();
            for (HashMap art : carrito){
                if( !codEliminar.equals((String)art.get("artCodigo"))){
                    array.add(art);
                }
            }
            session.setAttribute("carritosesion",array);
            if (array.isEmpty()){
                response.sendRedirect("./index?_msg_advertencia=Usted no posee articulos en el carrito" );
            }else{
                this.armarPagina(request, response);
            }

        }else{
        //Si desea consultar el carrito
            if (carrito.isEmpty()){
                response.sendRedirect("index?" + (String) session.getAttribute("atributosUrlAnterior") + "_msg_advertencia= Usted no posee articulos en el carrito");
                //Si no tiene nada en el carrito lo redirecciono a la pagina de donde viene con el mensaje 
            }else{
                this.armarPagina(request, response);
                //En este caso el cliente posee articulos en el carrito
            }
        }

    }
    

    protected void dispatch(HttpServletRequest request,
            HttpServletResponse response, String page) 
            throws javax.servlet.ServletException, 
            java.io.IOException {
        RequestDispatcher dispatcher = 
            getServletContext(). 
            getRequestDispatcher(page);
        dispatcher.forward(request, response);
    }
    protected void armarPagina(HttpServletRequest request,
            HttpServletResponse response)throws ServletException, IOException{
        
        String url = "/micrositios/" + (String) request.getAttribute("nomMicro");
        // Especificamos que pagina se coloca en cada parte del layout
        request.setAttribute("1", url + "/encabezado.jsp");
        request.setAttribute("2", url + "/destacado.jsp");
        request.setAttribute("3", url + "/buscador.jsp");
        request.setAttribute("4", "/vistas/pagina/menuizq.jsp");
        request.setAttribute("5", url + "/bannerizq.jsp");
        request.setAttribute("6", "/vistas/pagina/carrito.jsp");
        request.setAttribute("7", "/vistas/pagina/visitados.jsp");
        request.setAttribute("8", "/vistas/pagina/login.jsp");
        request.setAttribute("9", "/vistas/pagina/rss.jsp");
        request.setAttribute("11", "/vistas/pagina/marcas.jsp");
        request.setAttribute("10", url + "/pie.jsp");
        
        dispatch(request, response, "/compositor/pagina/nuevecuerpos.jsp");

    }
    
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
